<?php

namespace app\common\model;

use houdunwang\arr\Arr;
use think\Model;

/**
 * 分类模型
 * Class Category
 * @package app\common\model
 */
class Category extends Model
{
	// 数据表名称
	//**不论什么时候 加上表前缀**
	protected $table = 'category';
	// 数据表主键 复合主键使用数组定义 不设置则自动获取
	protected $pk = 'cid';

	//获取分类树状数据
	public function getCateData(){
		$data = db('category')->order('cid','desc')->select();
		$cateData = Arr::tree($data,'cname');
		return $cateData;
	}

	//添加方法
	public function add($data)
	{
		//1.验证器验证
		$result = $this->validate(true)->save($data);
		if(false === $result){
			//验证失败 输出错误信息
			return ['valid'=>0,'msg'=>$this->getError()];
		}else{
			return ['valid'=>1,'msg'=>'添加成功'];
		}

	}
	//删除方法
	public function del($cid){
		//1.通过父级cid找到自己的pid
		$pid = db('category')->where('cid',$cid)->value('pid');
		//2.修改儿子辈的pid改成自己的pid
		$this->where('pid',$cid)->update(['pid'=>$pid]);
		//删除掉自己
		$res = Category::destroy($cid);
		if($res){
			return ['valid' => 1, 'msg' => '删除成功'];
		}else{
			return ['valid' => 0, 'msg' => '删除失败'];
		}
	}

	/**
	 * 处理所属分类  两步
	 */
	public function categoryData($cid){
		//找见自己所有的儿子
		$cids = $this->getSon(db('category')->select(),$cid);
		//获取了自己和自己儿子辈的cid
		$cids[]=$cid;
		//除去自己和自己的子类
		$cateData = db('category')->whereNotIn('cid',$cids)->select();
		$treeData = Arr::tree($cateData,'cname');
		return $treeData;
	}

	//2.获取子集  找见自己的所有的儿子
	public function getSon($data,$cid){
		static $temp = [];
		foreach ($data as $v){
			//代表找见儿子
			if($v['pid'] == $cid){
				//因为可能有多个儿子  所以用了数组追加
				$temp[] = $v['cid'];
				//因为儿子可能还有下一代  所以进行递归
				$this->getSon($data,$v['cid']);
			}
		}
		return $temp;
	}
}
